Springboot Resttemplate URL中丢失加号(+)的问题终极解决

您所在的位置:网站首页 url 加号转义成什么 Springboot Resttemplate URL中丢失加号(+)的问题终极解决

Springboot Resttemplate URL中丢失加号(+)的问题终极解决

2024-07-11 06:43| 来源: 网络整理| 查看: 265

项目用Springboot Resttemplate做REST调用,测试发现个问题,就是URL参数值中如果有加号(+)就会变成空格,如: “http://localhost/rest?a=5+6=”,服务端收到:a=“5 6=”,也就是说,RestTemplate不对“+”encoding。我们也可以把值当参数,不写死在URL中,让RestTemplate处理,但RestTemplate不支持数组参数,如:a=1&a=2&a=3。那我们把“5+6=”先encode行不? 答案很残酷,根本不行,这样的话,服务端收到“5%2B6%3D”,需要服务端特别对这个值decode,服务端的同学不答应哦! 后来查阅了RestTemplate,发现getForEntity方法中,如果传递的是URI对象,它就不做处理,原封不动地传送,所以,我们自己对URL中的参数值encoding后,转成URI,再调用Spring RestTemplate,就能正确传递加号(+)了。 示例代码:

tags[0] = "5+6="; String url = "http://localhost:8080/api?a"; for (String tag: tags){ url += "&tags=" + UriEncoder.encode(tag); } resp = restTemplate.getForEntity(new URI(url), ResponseVo.class);

另外,有同学可能会问,你为什么不用Openfeign呢?这个是因为我们服务端使用spring-webflux(react模式)提高吞吐量,导致openfeign无法使用。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3